﻿using System;
using System.Collections.Generic;
using System.Text;
using smartBrowser.Util;
using System.Windows.Forms;
using smartBrowser.GUI;

namespace smartBrowser.Task
{
    /// <summary>
    /// @author Joel
    /// </summary>  
    public class FetchTagsTask : Task
    {
        public FetchTagsTask(WebSite webSite, TabPageForm form)
            : base(webSite, form)
        {
            
        }

        protected override void Execute()
        {
            Console.Out.WriteLine("Fetch TAGS TASK START");

            //Tira conceitos importantes dos sites. Considera-se conceitos importantes,
            //as palavras que estão em secções de destaque do documento
            List<Tag> tags = webSite.findHTMLBuzzWords();

            //Elimina as stop words da lista de conceitos
            tags = webSite.readStopWords(tags);

            //Novo método. Dado que o método anterior nos deu muito tipo de informação, e que juntamente com as transformações às conceitos,
            //ficamos com imensos tipos de conceitos, considerou-se que o melhor era fazer um top ranking de ocorrências dos conceitos no documento.
            webSite.rankByOccurence(tags);

            //Normaliza as tags, transformando advérbios, adjectivos ( etc.. ) em nomes

            List<Tag> nounTags = new List<Tag>();

            foreach (Tag tag in tags)
            {
                nounTags.AddRange(webSite.normalizeTag(tag));
            }

            //Para que não haja palavras repetidas
            foreach (Tag tag in nounTags)
                if (!tags.Contains(tag))
                    tags.Add(tag);

            webSite.matchTags(tags, smartBrowser.GUI.SmartBrowser.Instance.Ontologia);

            FireCompleteEvent();
            Console.Out.WriteLine("Fetch TAGS TASK COMPLETE");

        }
    }
}
